উদাহরণ সহ Composite Keys পরিচালনা

Java Technologies - স্প্রিং ওআরএম (Spring ORM) Spring ORM এ Composite Keys |
66
66

Composite Key হলো একটি ডেটাবেস টেবিলের জন্য একাধিক কলামের সমন্বয়ে তৈরি প্রাইমারি কী (Primary Key)। এটি তখন ব্যবহার করা হয় যখন একটি মাত্র কলাম প্রাইমারি কী হিসেবে যথেষ্ট নয়। স্প্রিং ORM-এ JPA (Java Persistence API) ব্যবহার করে সহজেই Composite Keys পরিচালনা করা যায়।


Composite Key তৈরির ধাপ

  1. Embeddable Class ব্যবহার করে Composite Key নির্ধারণ।
  2. Entity Class এ Embeddable Class-কে Primary Key হিসেবে সংযুক্ত করা।

উদাহরণ: Composite Keys এর ব্যবহার

ধাপ ১: Embeddable Class তৈরি করা

import jakarta.persistence.Embeddable;
import java.io.Serializable;

@Embeddable
public class EmployeeId implements Serializable {
    private int departmentId;
    private int employeeNumber;

    // Default Constructor
    public EmployeeId() {}

    // Parameterized Constructor
    public EmployeeId(int departmentId, int employeeNumber) {
        this.departmentId = departmentId;
        this.employeeNumber = employeeNumber;
    }

    // Getters and Setters
    public int getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(int departmentId) {
        this.departmentId = departmentId;
    }

    public int getEmployeeNumber() {
        return employeeNumber;
    }

    public void setEmployeeNumber(int employeeNumber) {
        this.employeeNumber = employeeNumber;
    }

    // Override equals() and hashCode() methods
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        EmployeeId that = (EmployeeId) o;
        return departmentId == that.departmentId && employeeNumber == that.employeeNumber;
    }

    @Override
    public int hashCode() {
        return Objects.hash(departmentId, employeeNumber);
    }
}

ব্যাখ্যা:

  • @Embeddable অ্যানোটেশনটি দিয়ে এই ক্লাসটিকে এমবেডযোগ্য হিসেবে চিহ্নিত করা হয়েছে।
  • Serializable ইন্টারফেস ইমপ্লিমেন্ট করা প্রয়োজন কারণ JPA এই ক্লাসকে ডেটাবেসে সংরক্ষণযোগ্য হিসেবে বিবেচনা করে।
  • equals() এবং hashCode() মেথড ওভাররাইড করা আবশ্যক।

ধাপ ২: Entity Class এ Composite Key ব্যবহার

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.IdClass;

@Entity
@IdClass(EmployeeId.class)
public class Employee {

    @Id
    private int departmentId;

    @Id
    private int employeeNumber;

    private String name;
    private String position;

    // Default Constructor
    public Employee() {}

    // Parameterized Constructor
    public Employee(int departmentId, int employeeNumber, String name, String position) {
        this.departmentId = departmentId;
        this.employeeNumber = employeeNumber;
        this.name = name;
        this.position = position;
    }

    // Getters and Setters
    public int getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(int departmentId) {
        this.departmentId = departmentId;
    }

    public int getEmployeeNumber() {
        return employeeNumber;
    }

    public void setEmployeeNumber(int employeeNumber) {
        this.employeeNumber = employeeNumber;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPosition() {
        return position;
    }

    public void setPosition(String position) {
        this.position = position;
    }
}

ব্যাখ্যা:

  • @IdClass(EmployeeId.class): এটি নির্দেশ করে যে Employee টেবিলের প্রাইমারি কী EmployeeId ক্লাসের সাথে ম্যাপ করা হয়েছে।
  • @Id: এই অ্যানোটেশনটি Composite Key এর প্রতিটি অংশের জন্য প্রয়োগ করতে হয়।

ধাপ ৩: Repository তৈরি করা

import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, EmployeeId> {
}

ব্যাখ্যা:

  • JpaRepository-তে EmployeeId কে Key Type হিসেবে ব্যবহার করা হয়েছে।
  • Spring Data JPA স্বয়ংক্রিয়ভাবে Composite Key এর জন্য ডেটা অ্যাক্সেস মেথড তৈরি করে।

ধাপ ৪: সার্ভিস লেয়ারে ব্যবহার

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public void saveEmployee(Employee employee) {
        employeeRepository.save(employee);
    }

    public Employee getEmployeeById(EmployeeId employeeId) {
        return employeeRepository.findById(employeeId).orElse(null);
    }
}

ব্যাখ্যা:

  • saveEmployee(): একটি নতুন এমপ্লয়ি ডেটাবেসে সংরক্ষণ করে।
  • getEmployeeById(): Composite Key এর মাধ্যমে একটি এমপ্লয়ি রিট্রিভ করে।

উদাহরণ: ডেটা সংরক্ষণ এবং রিট্রিভ করা

ডেটা সংরক্ষণ

EmployeeId employeeId = new EmployeeId(1, 101);
Employee employee = new Employee(1, 101, "John Doe", "Developer");
employeeService.saveEmployee(employee);

ডেটা রিট্রিভ

EmployeeId employeeId = new EmployeeId(1, 101);
Employee employee = employeeService.getEmployeeById(employeeId);
System.out.println("Employee Name: " + employee.getName());

Composite Key ব্যবহারের সুবিধা

  1. ডেটার ইন্টিগ্রিটি নিশ্চিত: একাধিক কলামের সমন্বয়ে ডেটার অনন্যতা নিশ্চিত করা যায়।
  2. স্পষ্ট রিলেশনশিপ: ডেটাবেস টেবিলগুলোর মধ্যে জটিল সম্পর্ক সহজে পরিচালনা করা যায়।
  3. পুনরায় ব্যবহারযোগ্যতা: @Embeddable ক্লাস পুনরায় ব্যবহারযোগ্য যা কোড মডুলার এবং পরিচ্ছন্ন করে।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion